package cn.com.surker.system.service.impl;

import cn.com.surker.common.Code;
import cn.com.surker.enums.StateEnum;
import cn.com.surker.redis.RedisUtils;
import cn.com.surker.system.dao.SystemConfigDao;
import cn.com.surker.system.entity.SystemConfig;
import cn.com.surker.system.service.SystemConfigService;
import cn.com.surker.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
* <p>
    * 系统参数设置 服务实现类
    * </p>
*
* @author admin
* @since 2022-05-11
*/
@Service
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, SystemConfig> implements SystemConfigService {

        @Resource
        private SystemConfigDao mapper;

    /**redis缓存帮助类**/
    @Resource
    private RedisUtils redisUtils;

    /**
    * 根据条件查询所有的数据
    * @param dto
    * @return
    */
    public List<SystemConfig> findAll(SystemConfig dto){

        QueryWrapper<SystemConfig> query = new QueryWrapper();
        query.setEntity(dto);
        List<SystemConfig> list = mapper.selectList(query);

        return list;
    }


    /**
    * 分页查询数据
    * @param dto page
    * @return
    */
    public IPage findAllByPage(SystemConfig dto, Page<SystemConfig> page){
        QueryWrapper<SystemConfig> query = new QueryWrapper();
        query.setEntity(dto);
        IPage<SystemConfig> iPage = mapper.selectPage(page,query);

        return iPage;
    }


    /**
    * 新增数据
    * @param dto page
    * @return
    */
    public Integer saveInit(SystemConfig dto){
        if (dto == null || StringUtils.isAllParamNull(dto.getName(), dto.getOptValue()))
            return Code.PARAM_ERROR.getCode();

        Date nowDate = new Date();
        dto.setStatus(StateEnum.ENABLED.getCode());
        dto.setUpdateTime(nowDate);
        dto.setCreateTime(nowDate);
        QueryWrapper<SystemConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", dto.getName());
        queryWrapper.eq("status", StateEnum.ENABLED.getCode());

        Integer count = mapper.selectCount(queryWrapper);
        if (count > 0) {
            SystemConfig config = mapper.selectOne(queryWrapper);
            config.setUpdateTime(nowDate);
            config.setOptValue(dto.getOptValue());
            config.setRemark(dto.getRemark());
            Integer saveStatus = mapper.updateById(config);
            if(saveStatus > 0){
                return 0;
            }else{
                return -1;
            }
        } else {
            int saveStatus = mapper.insert(dto);
            if(saveStatus > 0){
                return 0;
            }else{
                return -1;
            }
        }
    }

    /**
    * 更新数据
    * @param dto page
    * @return
    */
    public Integer update(SystemConfig dto){
        if (dto == null || StringUtils.isAllParamNull(dto.getId(), dto.getName(), dto.getOptValue()))
            return Code.PARAM_ERROR.getCode();
        int saveStatus = mapper.updateById(dto);
        if(saveStatus > 0){
            return 0;
        }else{
            return -1;
        }

    }
}